package com.yunjian.generator;

import com.baomidou.mybatisplus.core.toolkit.StringPool;
import com.baomidou.mybatisplus.generator.AutoGenerator;
import com.baomidou.mybatisplus.generator.InjectionConfig;
import com.baomidou.mybatisplus.generator.config.*;
import com.baomidou.mybatisplus.generator.config.po.TableInfo;
import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy;
import com.baomidou.mybatisplus.generator.engine.FreemarkerTemplateEngine;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.util.ArrayList;
import java.util.List;

public class CodeGenerator {

	private static Logger logger = LoggerFactory.getLogger(CodeGenerator.class);

	public static void main(String[] args) {
		// 代码生成器
		AutoGenerator mpg = new AutoGenerator();

		// 全局配置
		GlobalConfig gc = new GlobalConfig();
		String projectPath = System.getProperty("user.dir");
		logger.info("项目路径>>>[{}]", projectPath);
		gc.setOutputDir(projectPath + "/src/main/java");
		gc.setAuthor("laizhiwen");
		gc.setOpen(false);
		mpg.setGlobalConfig(gc);

		// 数据源配置
		DataSourceConfig dsc = new DataSourceConfig();
		dsc.setUrl(
				"jdbc:mysql://134.175.242.78:3306/cutting_db?serverTimezone=Asia/Shanghai&characterEncoding=utf8&useSSL=false");
		dsc.setDriverName("com.mysql.jdbc.Driver");
		dsc.setUsername("cutting");
		dsc.setPassword("$$$cutting^_^");
		mpg.setDataSource(dsc);

		List<String> list = new ArrayList<>(); // 数据表的列表
		list.add("tb_sys_order_detail");
		for (String tablename : list) {
			// 包配置
			PackageConfig pc = new PackageConfig();
			pc.setParent("com.yunjian.core");
			mpg.setPackageInfo(pc);

			// 自定义配置
			InjectionConfig cfg = new InjectionConfig() {
				@Override
				public void initMap() {
					// to do nothing
				}
			};

			// 如果模板引擎是 freemarker
			String templatePath = "/templates/mapper.xml.ftl";

			// 自定义输出配置
			List<FileOutConfig> focList = new ArrayList<>();
			// 自定义配置会被优先输出
			focList.add(new FileOutConfig(templatePath) {
				@Override
				public String outputFile(TableInfo tableInfo) {
					// 自定义输出文件名 ， 如果你 Entity 设置了前后缀、此处注意 xml 的名称会跟着发生变化！！
					return projectPath + "/src/main/resources/mapper" + "/" + tableInfo.getEntityName() + "Mapper"
							+ StringPool.DOT_XML;
				}
			});

			cfg.setFileOutConfigList(focList);
			mpg.setCfg(cfg);

			// 配置模板
			TemplateConfig templateConfig = new TemplateConfig();
			templateConfig.setXml(null);
			mpg.setTemplate(templateConfig);

			// 策略配置
			StrategyConfig strategy = new StrategyConfig();
			strategy.setNaming(NamingStrategy.underline_to_camel);
			strategy.setColumnNaming(NamingStrategy.underline_to_camel);
			//strategy.setSuperEntityClass("com.yunjian.core.entity.BaseEntity");
			strategy.setEntityLombokModel(true);
			strategy.setRestControllerStyle(true);
			strategy.setInclude(tablename);
			strategy.setSuperEntityColumns("id");
			strategy.setControllerMappingHyphenStyle(true);
			strategy.setTablePrefix("tb_");
			mpg.setStrategy(strategy);
			mpg.setTemplateEngine(new FreemarkerTemplateEngine());
			mpg.execute();
		}
	}
}
